﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using DAL;
using UtilityExtensions;
using System.Transactions;
using System.ComponentModel;


namespace BOL
{
    public class RendicionItemInfo
    {
        
        public int idInternal{ get; set; }   
        public int? idOrden { get; set; }
        public int? idComparativo { get; set; }
        public DateTime fecha { get; set; }
        public int idTipoDocumento { get; set; }
        public string tipodocumento { get; set; }
        

        public string numdocumento { get; set; }
        public string descripcion { get; set; }
        public string concepto { get; set; }
        public decimal total { get; set; }
        
        public int idCajaRendicion { get; set; }



        public string totalStr { get; set; }
        public string fechaStr { get; set; }

        public bool validaAddItemDrw(DataSet ds)
        {

            //var q = from a in ds.Tables[this.GetType().Name].AsEnumerable().Where(p => p.RowState != DataRowState.Deleted)
            //        where a.Field<int>("idProyectoTipo") == this.idProyectoTipo
            //        select a;
            //if (q.Count() > 0)
            //{
            //    throw new Exception("El Proyecto tipo ya se encuentra ingresado ");
            //}
            return true;
        }
        public DataRow GetItemDrw(DataSet ds, int idInternal)
        {

            DataRow drw = (from a in ds.Tables[this.GetType().Name].AsEnumerable().Where(p => p.RowState != DataRowState.Deleted)
                           where a.Field<int>("idInternal") == idInternal
                           select a).First();


            return drw;


        }
        public void DeleteDrw(DataSet ds, int idInternal)
        {

            DataRow drw = this.GetItemDrw(ds, idInternal);
            drw.Delete();
            //ds.Tables[this.GetType().Name].Rows.Remove(drw);
        }
        public void AddDrw(DataSet ds,
                           int idOrden,
                            int? idComparativo,
                            DateTime fecha,
                            int idTipoDocumento,
                            string numdocumento,
                            string descripcion,
                            string concepto,
                            decimal total,
                            int idCajaRendicion)
        {
            
            this.idInternal = UtilityExtensions.Util.GenerarID();
           
             this.idOrden=idOrden;
             this.idComparativo=idComparativo;
             this.fecha=fecha;
             this.idTipoDocumento=idTipoDocumento;
             this.numdocumento=numdocumento;
             this.descripcion=descripcion;
             this.concepto=concepto;
             this.total=total;
             this.totalStr=total.ToString("N");
             this.idCajaRendicion = idCajaRendicion;
            this.descripcion = descripcion;

            validaAddItemDrw(ds);

            DataRow drw = UtilityExtensions.Util.EntidadToDataRow(this);
            ds.Tables[this.GetType().Name].ImportRow(drw);
        }


        //public void AddDataSet(DataSet ds, int idParent)
        //{
        //    DataSet dsDiferencias = new DataSet();

        //    using (TransactionScope ts = new TransactionScope())
        //    {

        //        if (ds.HasChanges())
        //        {
        //            dsDiferencias.Merge(ds.GetChanges());

        //            foreach (DataRow drw in dsDiferencias.Tables[this.GetType().Name].Rows)
        //            {

        //                if (drw.RowState == DataRowState.Modified)
        //                {
        //                    var cp = DbUtil.Db.RendicionItems.Single(p => p.idInternal == drw.Field<int>("IdInternal"));
                                      
        //                              cp.fecha =drw.Field<DateTime>("fecha");
        //                              cp.idOrden=drw.Field<int>("idOrden");
        //                              cp.idComparativo=drw.Field<int?>("idComparativo");
        //                              cp.idTipoDocumento=drw.Field<int>("idTipoDocumento");
        //                              cp.numdocumento=drw.Field<string>("numDocumento");
        //                              cp.descripcion=drw.Field<string>("descripcion");
        //                              cp.concepto=drw.Field<string>("concepto");
        //                              cp.total=drw.Field<decimal>("total");
                                      

        //                }
        //                if (drw.RowState == DataRowState.Deleted)
        //                {
        //                    drw.RejectChanges();
        //                    var cp = DbUtil.Db.RendicionItems.Single(p => p.idInternal == drw.Field<int>("IdInternal"));

        //                    DbUtil.Db.RendicionItems.DeleteOnSubmit(cp);

        //                }

        //                if (drw.RowState == DataRowState.Added)
        //                {

        //                    var q = new RendicionItem();
        //                    q.SetAdd(drw.Field<DateTime>("fecha"),
        //                              drw.Field<int>("idOrden"),
        //                              drw.Field<int?>("idComparativo"),
        //                              drw.Field<int>("idTipoDocumento"),
        //                              drw.Field<string>("numDocumento"),
        //                              drw.Field<string>("descripcion"),
        //                              drw.Field<string>("concepto"),
        //                              drw.Field<decimal>("total"),
        //                              drw.Field<int>("idParent"));

                       

        //                    DbUtil.Db.RendicionItems.InsertOnSubmit(q);
        //                }

        //                //al editar tiene que volver a seleccion el Proveedor

        //            }
        //            DbUtil.Db.SubmitChanges();

        //        }

        //        ts.Complete();
        //    }
        //}


       
    }
}
